<?php
/**
Copyright (C), ：06/06
name：模板解析(开发版)
Author：猪也知道  waitfox@qq.com
Description:轻巧模板解析类，最大程度的原生态。
*/
class Template {
private $arrayConfig = array(
'suffix'=>'.ptd',//设置模版文件的后缀
'templateDir'=>'template/',//设置模板所在的文件夹
'cachedir'=>'cache/',//设置编译后的缓存文件存放的目录
'cache_htm'=>false,//是否需要编译成静态的HTML文件
'suffix_cache'=>'.htm',//设置编译文件的后缀
'cache_time'=>7200//多长时间自动更新，单位秒，建议设置大一些
);
	private $value=array();
	private $message=null;
	public $file;//模版文件名，不带路径
	public $cache_file;//编译后的完整文件名
	static private $instance = null;
	public function __construct($arrayConfig = array()) {
		$this->arrayConfig= $arrayConfig+$this->arrayConfig;
	}
	/**
	 * 取得模板引擎的实例
	 * 
	 * @return objeact
	 * @access public
	 * @static
	 */
	public static function getInstance() {
		if(is_null(self::$instance)) {
			self::$instance = new Template();
		}
		return self::$instance;
	}
	/* 单步设置引擎 */
	public function setConfig($key, $value = null)
	{
		if(is_array($key))
		{
			$this->arrayConfig= $key+$this->arrayConfig;
		}else{
			$this->arrayConfig[$key] = $value;
		}
	}
	/* 获取当前模板引擎配置，仅供调试使用 */
	public function getConfig($key = null)
	{
		if($key){
		return $this->arrayConfig[$key];
		}else{
	return $this->arrayConfig;}
	}
	/**
	 * 注入单个变量
	 *
	 * @param string $key 模板变量名
	 * @param mixed $value 模板变量的值
	 * @return void
	 */
	public function assign($key,$value){
		$this->value[$key]=$value;
	}
/**
	 * 注入数组变量
	 *
	 * @param array $array
	 */
	public function assignArray($array) {
		if (is_array($array)) {
			foreach ($array as $k => $v) {
				$this->value[$k] = $v;
			}
		}
	}
	//返回编译文件的文件名，以后存在路径处理故封装
	public function path(){
		return $this->cache_file=$this->arrayConfig['cachedir'].$this->file.$this->arrayConfig['suffix_cache'];
	}
//开始编译	
public function compile(){
$this->message=ob_get_contents();
@file_put_contents($this->path(),$this->message);
$flag[]=array('file'=>$this->path(),'lastmodify'=>$_SERVER['REQUEST_TIME']);
}
/**
	 * 显示模板
	 * @param string $file 模板名
*/
public function show($file){
$this->file=$file;
$PIG_TPL_FILE=$this->arrayConfig['templateDir'].$file.$this->arrayConfig['suffix'];
//先判断缓存文件是否存在,再看是否过期
if(is_file($this->path())){
$old=$_SERVER['REQUEST_TIME']-filemtime($this->path())>=$this->arrayConfig['cache_time']?1:0;//判断缓存是否过期
}else{
$old=0;
}
if(true==$this->arrayConfig['cache_htm']){//如果需要静态编译
	if(is_file($this->path())&&!$old){
		readfile($this->path());//静态编译文件存在且未过期
	}else{
		if(is_file($PIG_TPL_FILE)){
		ob_start();
		extract($this->value);
		include($PIG_TPL_FILE);// 否则就重新编译
		$this->compile();
		}else{die('找不到模板文件.');}
	}	
}else{//不需要编译
	if(is_file($PIG_TPL_FILE)){
	extract($this->value);
	include($PIG_TPL_FILE);// 否则就加载原始文件并保存
	}else{die('找不到模板文件：'.$PIG_TPL_FILE);}
}
}//end show

public function __destruct(){
$value=NULL;//释放资源
	}
}